home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / php / pear / Benchmark / Iterate.php next >
PHP Script  |  2004-03-24  |  4KB  |  156 lines

  1. <?php
  2. //
  3. // +------------------------------------------------------------------------+
  4. // | PEAR :: Benchmark                                                      |
  5. // +------------------------------------------------------------------------+
  6. // | Copyright (c) 2001-2003 Sebastian Bergmann <sb@sebastian-bergmann.de>. |
  7. // +------------------------------------------------------------------------+
  8. // | This source file is subject to version 3.00 of the PHP License,        |
  9. // | that is available at http://www.php.net/license/3_0.txt.               |
  10. // | If you did not receive a copy of the PHP license and are unable to     |
  11. // | obtain it through the world-wide-web, please send a note to            |
  12. // | license@php.net so we can mail you a copy immediately.                 |
  13. // +------------------------------------------------------------------------+
  14. //
  15. // $Id: Iterate.php,v 1.6 2003/01/01 17:57:52 sterling Exp $
  16. //
  17.  
  18. require_once 'Benchmark/Timer.php';
  19.  
  20. /**
  21. * Benchmark::Benchmark_Iterate
  22. * Purpose:
  23. *     Benchmarking
  24. * Example:
  25. *   a) 
  26. *     require_once 'Benchmark/Iterate.php';
  27. *     $benchmark = new Benchmark_Iterate;
  28. *     function foo($string) {
  29. *         print $string . '<br>';
  30. *     }
  31. *     $benchmark->run(100, 'foo', 'test');
  32. *     $result = $benchmark->get();
  33. *
  34. *   b)
  35. *     require_once 'Benchmark/Iterate.php';
  36. *     $benchmark = new Benchmark_Iterate;
  37. *     class myclass{
  38. *
  39. *       function foo($string) {
  40. *             print $string . '<br>';
  41. *       }
  42. *     }
  43. *     $benchmark->run(100, 'myclass::foo', 'test');
  44. *     $result = $benchmark->get();
  45. *
  46. *   c)
  47. *     require_once 'Benchmark/Iterate.php';
  48. *     $benchmark = new Benchmark_Iterate;
  49. *     class myclass{
  50. *
  51. *       function foo($string) {
  52. *             print $string . '<br>';
  53. *       }
  54. *     }
  55. *
  56. *     $myobj = new myclass();
  57. *     $benchmark->run(100, 'myobj->foo', 'test');
  58. *     $result = $benchmark->get();
  59. *
  60. * @author   Sebastian Bergmann <sb@sebastian-bergmann.de>
  61. * @version  $Revision: 1.6 $
  62. * @access   public
  63. */
  64.  
  65. class Benchmark_Iterate extends Benchmark_Timer {
  66.     /**
  67.     * Benchmarks a function.
  68.     *
  69.     * @access public
  70.     */
  71.  
  72.     function run() {
  73.         $arguments     = func_get_args();
  74.  
  75.         $iterations    = array_shift($arguments);
  76.         $function_name = array_shift($arguments);
  77.     
  78.         if (strstr($function_name, '::')) {
  79.           $function_name = explode('::', $function_name);
  80.           $objectmethod = $function_name[1];
  81.         }
  82.  
  83.         // If we're calling a method on an object use call_user_func
  84.         if (strstr($function_name, '->')) {
  85.             $function_name = explode('->', $function_name);
  86.             $objectname = $function_name[0];
  87.  
  88.             global ${$objectname};
  89.             $objectmethod = $function_name[1];
  90.  
  91.             for ($i = 1; $i <= $iterations; $i++) {
  92.                 $this->setMarker('start_' . $i);
  93.                 call_user_func_array(array(${$objectname}, $function_name[1]), $arguments);
  94.                 $this->setMarker('end_' . $i);
  95.             }
  96.             return(0);
  97.         }
  98.  
  99.         for ($i = 1; $i <= $iterations; $i++) {
  100.             $this->setMarker('start_' . $i);
  101.             call_user_func_array($function_name, $arguments);
  102.             $this->setMarker('end_' . $i);
  103.         }
  104.     }
  105.  
  106.     /**
  107.     * Returns benchmark result.
  108.     *
  109.     * $result[x           ] = execution time of iteration x
  110.     * $result['mean'      ] = mean execution time
  111.     * $result['iterations'] = number of iterations
  112.     *
  113.     * @return array $result
  114.     * @access public
  115.     */
  116.  
  117.     function get() {
  118.         $result = array();
  119.         $total  = 0;
  120.  
  121.         $iterations = count($this->markers)/2;
  122.  
  123.         for ($i = 1; $i <= $iterations; $i++) {
  124.             $time = $this->timeElapsed('start_'.$i , 'end_'.$i);
  125.  
  126.             if (extension_loaded('bcmath')) {
  127.                 $total = bcadd($total, $time, 6);
  128.             } else {
  129.                 $total = $total + $time;
  130.             }
  131.             
  132.             $result[$i] = $time;
  133.         }
  134.  
  135.         if (extension_loaded('bcmath')) {
  136.             $result['mean'] = bcdiv($total, $iterations, 6);
  137.         } else {
  138.             $result['mean'] = $total / $iterations;
  139.         }
  140.  
  141.         $result['iterations'] = $iterations;
  142.  
  143.         return $result;
  144.     }
  145. }
  146. ?>
  147.